// --路由拦截--//
import router from './router'// 引入路由实例
import store from '@/store' // 引入vuex store实例
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式

const whiteList = ['/login', '/404'] // 定义白名单  所有不受权限控制的页面
// 路有前置守卫
router.beforeEach(async(to, from, next) => {
  const { token, userId } = store.getters
  NProgress.start()
  // 如果有token 判断是否去登录页
  if (token) {
    // 去登录页前,判断用户信息是否获取了,如果没有获取,就获取后再跳转
    if (!userId) {
      // 调用用户信息actions
      const { roles } = await store.dispatch('user/getUserInfo')
      const userRoute = await store.dispatch('permission/filterRoutes', roles.menus)
      router.addRoutes([...userRoute, { path: '*', redirect: '/404', hidden: true }])
      next(to.path)
    }
    if (to.path === '/login') {
      next('/')
    } else {
      next()
    }
    // 没有token 就判断是否要去白名单页面
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
  // NProgress.done()
  router.afterEach(() => {
    NProgress.done()
  })
})
